package org.shj.pattern.templatemethod;

/**
 * 模板方法模式: 是通过把不变行为搬到超类，去除子类中的重复代码来体现它的优势。当我们要完成在某一细节层次一致的一个过程或一系列步骤，
 *             但其个别步骤在更详细的层次上的实现可能不同时，我们通常考虑用模板方法模式来处理。
 *             当不变的和可变的行为在方法的子类实现中混合在一起的时候，不变的行为就会在子类中重复出现。通过模板方法模式把这些行为
 *             搬移到单一的地方，这样就帮助子类摆脱重复的不变行为的纠缠。
 * 意图： 定义一个操作中的算法的骨架，而将一些步骤延迟到子尖中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
 * 应用实例： 像Hibernate等持久层框架，我们无须写那些数据库连接，关闭数据库连接等模板式的代码，只需关注我们需要CRUD的实体
 * 
 * 建造者模式与模板模式的区别
 * 1. 建造者模式是创建型模式 -- 着重对象的构建
 * 2. 建造者模式中的指挥者是建造者模式的灵魂
 * 3. 模板模式是行为型模式  -- 着重类的行为
 * 4. 个人认为建造者模式去掉指挥者就是模板模式
 * 
 * @author huangjian
 *
 */
public class Main {

	public static void main(String[] args){
		AbstractClass c = new ConcreteClassA();
		c.templateMethod();
		
		c = new ConcreteClassB();
		c.templateMethod();
	}
}
